$(document).ready(function(){

	jQuery.fn.apenasNumeros = function () {
		var $teclas = { 8: 'backspace', 9: 'tab', 13: 'enter', 48: 0, 49: 1, 50: 2, 51: 3, 52: 4, 53: 5, 54: 6, 55: 7, 56: 8, 57: 9 };
		$(this).keypress(function (e) {
			var keyCode = e.keyCode ? e.keyCode : e.which ? e.which : e.charCode;
			if (keyCode in $teclas) {
				return true;
			} else {
				return false;
			}
		});
		return $(this);
	}

	jQuery.validator.addMethod("verificaCPF", function(value, element) {
		value = value.replace('.','');
		value = value.replace('.','');
		cpf = value.replace('-','');
		while(cpf.length < 11) cpf = "0"+ cpf;
		var expReg = /^0+$|^1+$|^2+$|^3+$|^4+$|^5+$|^6+$|^7+$|^8+$|^9+$/;
		var a = [];
		var b = new Number;
		var c = 11;
		for (i=0; i<11; i++){
			a[i] = cpf.charAt(i);
			if (i < 9) b += (a[i] * --c);
		}
		if ((x = b % 11) < 2) { a[9] = 0 } else { a[9] = 11-x }
		b = 0;
		c = 11;
		for (y=0; y<10; y++) b += (a[y] * c--);
		if ((x = b % 11) < 2) { a[10] = 0; } else { a[10] = 11-x; }
		if ((cpf.charAt(9) != a[9]) || (cpf.charAt(10) != a[10]) || cpf.match(expReg)) return false;
		return true;
	}, "Informe um CPF válido."); // Mensagem padrão
	
	jQuery.validator.addMethod("dateBR", function(value, element) {
		if(value.length==0){
			return true;
		}
		else{
			//contando chars
			if(value.length!=10) return false;
			// verificando data
			var data        = value;
			var dia         = data.substr(0,2);
			var barra1      = data.substr(2,1);
			var mes         = data.substr(3,2);
			var barra2      = data.substr(5,1);
			var ano         = data.substr(6,4);
			if(data.length!=10 || barra1!="/" || barra2!="/" || isNaN(dia) || isNaN(mes) || isNaN(ano) || dia>31 || mes>12 || ano < 1900) return false;
			if((mes==4 || mes==6 || mes==9 || mes==11) && dia==31) return false;
			if(mes==2 && (dia>29||(dia==29 && ano%4!=0))) return false;
			return true;
		}
	}, "Informe uma data válida");  // Mensagem padrão
	
	jQuery.validator.addMethod("dateTimeBR", function(value, element) {
		//contando chars
		if(value.length!=16) return false;
		// dividindo data e hora
		if(value.substr(10,1)!=' ') return false; // verificando se há espaço
		var arrOpcoes = value.split(' ');
		if(arrOpcoes.length!=2) return false; // verificando a divisão de data e hora
		// verificando data
		var data        = arrOpcoes[0];
		var dia         = data.substr(0,2);
		var barra1      = data.substr(2,1);
		var mes         = data.substr(3,2);
		var barra2      = data.substr(5,1);
		var ano         = data.substr(6,4);
		if(data.length!=10 || barra1!="/" || barra2!="/" || isNaN(dia) || isNaN(mes) || isNaN(ano) || dia>31 || mes>12 || ano < 1900) return false;
		if((mes==4 || mes==6 || mes==9 || mes==11) && dia==31) return false;
		if(mes==2 && (dia>29||(dia==29 && ano%4!=0))) return false;
		// verificando hora
		var horario     = arrOpcoes[1];
		var hora        = horario.substr(0,2);
		var doispontos  = horario.substr(2,1);
		var minuto      = horario.substr(3,2);
		if(horario.length!=5 || isNaN(hora) || isNaN(minuto) || hora>23 || minuto>59 || doispontos!=":") return false;
		return true;
	}, "Informe uma data e uma hora válida");

	jQuery.extend(jQuery.validator.messages, {
	    required: "Este campo é obrigatório.",
	    remote: "Please fix this field.",
	    email: "E-mail inválido",
	    url: "Please enter a valid URL.",
	    date: "Data inválida.",
	    dateISO: "Please enter a valid date (ISO).",
	    number: "Número invalido.",
	    digits: "Please enter only digits.",
	    creditcard: "Please enter a valid credit card number.",
	    equalTo: "Please enter the same value again.",
	    accept: "Please enter a value with a valid extension.",
	    maxlength: jQuery.validator.format("é preciso ser maior que {0} caracteres."),
	    minlength: jQuery.validator.format("é preciso ser menor que {0} caracteres."),
	    rangelength: jQuery.validator.format("Please enter a value between {0} and {1} characters long."),
	    range: jQuery.validator.format("Please enter a value between {0} and {1}."),
	    max: jQuery.validator.format("Please enter a value less than or equal to {0}."),
	    min: jQuery.validator.format("Please enter a value greater than or equal to {0}.")
	});
});